home *** CD-ROM | disk | FTP | other *** search
/ AmigActive 2 / AACD 2.iso / AACD / Magazine / GraphicsCards / StormMesa / src / misc.s < prev    next >
Text File  |  1999-02-04  |  25KB  |  1,372 lines

  1.  
  2. ; Storm C Compiler
  3. ; Work2:Mesa3/Mesa-3.0/src/misc.c
  4.     mc68030
  5.     mc68881
  6.     XREF    _gl_clear_stencil_buffer
  7.     XREF    _gl_mask_index_span
  8.     XREF    _gl_mask_rgba_span
  9.     XREF    _gl_clear_depth_buffer
  10.     XREF    _gl_update_state
  11.     XREF    _gl_error
  12.     XREF    _gl_write_alpha_span
  13.     XREF    _gl_clear_alpha_buffers
  14.     XREF    _gl_clear_accum_buffer
  15.     XREF    _q_memset
  16.     XREF    _strcat
  17.     XREF    _strcpy
  18.     XREF    _CC
  19.     XREF    _std__in
  20.     XREF    _std__out
  21.     XREF    _std__err
  22.  
  23.     SECTION "_gl_ClearIndex:0",CODE
  24.  
  25.  
  26. ;void gl_ClearIndex( GLcontext *ctx, GLfloat c )
  27.     XDEF    _gl_ClearIndex
  28. _gl_ClearIndex
  29.     move.l    4(a7),a0
  30.     fmove.s    $8(a7),fp0
  31. L82
  32. ;   if (INSIDE_BEGIN_END(ctx)) 
  33.     move.l    a0,a1
  34.     add.l    #$E968,a1
  35.     move.l    (a1),d0
  36.     cmp.l    #$1A00,d0
  37.     beq.b    L84
  38. L83
  39. ;      gl_error( ctx, GL_INVALID_OPERATION, "glClearIndex" );
  40.     move.l    #L81,-(a7)
  41.     pea    $502.w
  42.     move.l    a0,-(a7)
  43.     jsr    _gl_error
  44.     add.w    #$C,a7
  45.     rts
  46. L84
  47. ;   ctx->Color.ClearIndex = (GLuint) c;
  48.     fmove.l    fp0,d0
  49.     move.l    d0,$21C4(a0)
  50. ;   if (!ctx->Visual->RGBAflag) 
  51.     move.l    $8F8(a0),a1
  52.     tst.b    (a1)
  53.     bne.b    L86
  54. L85
  55. ;      (*ctx->Driver.ClearIndex)( ctx, ctx->Color.ClearIndex );
  56.     move.l    $21C4(a0),-(a7)
  57.     move.l    a0,-(a7)
  58.     move.l    $908(a0),a0
  59.     jsr    (a0)
  60.     addq.w    #$8,a7
  61. L86
  62.     rts
  63.  
  64. L78
  65.     dc.b    '1.2 Mesa 3.0',0
  66. L77
  67.     dc.b    'Brian Paul',0
  68. L79
  69.     dc.b    'GL_EXT_blend_color GL_EXT_blend_minmax GL_EXT_blend_logic_op GL_'
  70.     dc.b    'EXT_blend_subtract GL_EXT_paletted_texture GL_EXT_point_paramete'
  71.     dc.b    'rs GL_EXT_polygon_offset GL_EXT_vertex_array GL_EXT_texture_obje'
  72.     dc.b    'ct GL_EXT_texture3D GL_MESA_window_pos GL_MESA_resize_buffers GL'
  73.     dc.b    '_EXT_shared_texture_palette GL_EXT_rescale_normal GL_EXT_abgr GL'
  74.     dc.b    '_SGIS_texture_edge_clamp GL_SGIS_multitexture GL_EXT_multitextur'
  75.     dc.b    'e',0
  76. L81
  77.     dc.b    'glClearIndex',0
  78.  
  79.     SECTION "_gl_ClearColor:0",CODE
  80.  
  81.     rts
  82.  
  83. ;void gl_ClearColor( GLcontext *ctx, GLclampf red, GLclampf green,
  84.     XDEF    _gl_ClearColor
  85. _gl_ClearColor
  86.     movem.l    d2/d3,-(a7)
  87.     fmovem.x fp2/fp3,-(a7)
  88.     move.l    $24(a7),a0
  89.     fmove.s    $34(a7),fp0
  90.     fmove.s    $30(a7),fp1
  91.     fmove.s    $2C(a7),fp2
  92.     fmove.s    $28(a7),fp3
  93. L88
  94. ;   if (INSIDE_BEGIN_END(ctx)) 
  95.     move.l    a0,a1
  96.     add.l    #$E968,a1
  97.     move.l    (a1),d0
  98.     cmp.l    #$1A00,d0
  99.     beq.b    L90
  100. L89
  101. ;      gl_error( ctx, GL_INVALID_OPERATION, "glClearColor" );
  102.     move.l    #L87,-(a7)
  103.     pea    $502.w
  104.     move.l    a0,-(a7)
  105.     jsr    _gl_error
  106.     add.w    #$C,a7
  107.     fmovem.x (a7)+,fp2/fp3
  108.     movem.l    (a7)+,d2/d3
  109.     rts
  110. L90
  111. ;   ctx->Color.ClearColor[0] = CLAMP( red,   0.0F, 1.0F );
  112.     fcmp.s    #$.00000000,fp3
  113.     fboge.b    L92
  114. L91
  115.     fmove.s    #$.00000000,fp3
  116.     bra.b    L96
  117. L92
  118.     fcmp.s    #$.3F800000,fp3
  119.     fbole.b    L94
  120. L93
  121.     fmove.s    #$.3F800000,fp3
  122. L94
  123. L95
  124. L96
  125.     fmove.s    fp3,$21C8(a0)
  126. ;   ctx->Color.ClearColor[1] = CLAMP( green, 0.0F, 1.0F );
  127.     fcmp.s    #$.00000000,fp2
  128.     fboge.b    L98
  129. L97
  130.     fmove.s    #$.00000000,fp2
  131.     bra.b    L102
  132. L98
  133.     fcmp.s    #$.3F800000,fp2
  134.     fbole.b    L100
  135. L99
  136.     fmove.s    #$.3F800000,fp2
  137. L100
  138. L101
  139. L102
  140.     lea    $21C8(a0),a1
  141.     fmove.s    fp2,4(a1)
  142. ;   ctx->Color.ClearColor[2] = CLAMP( blue,  0.0F, 1.0F );
  143.     fcmp.s    #$.00000000,fp1
  144.     fboge.b    L104
  145. L103
  146.     fmove.s    #$.00000000,fp1
  147.     bra.b    L108
  148. L104
  149.     fcmp.s    #$.3F800000,fp1
  150.     fbole.b    L106
  151. L105
  152.     fmove.s    #$.3F800000,fp1
  153. L106
  154. L107
  155. L108
  156.     lea    $21C8(a0),a1
  157.     fmove.s    fp1,$8(a1)
  158. ;   ctx->Color.ClearColor[3] = CLAMP( alpha, 0.0F, 1.0F );
  159.     fcmp.s    #$.00000000,fp0
  160.     fboge.b    L110
  161. L109
  162.     fmove.s    #$.00000000,fp0
  163.     bra.b    L114
  164. L110
  165.     fcmp.s    #$.3F800000,fp0
  166.     fbole.b    L112
  167. L111
  168.     fmove.s    #$.3F800000,fp0
  169. L112
  170. L113
  171. L114
  172.     lea    $21C8(a0),a1
  173.     fmove.s    fp0,$C(a1)
  174. ;   if (ctx->Visual->RGBAflag) 
  175.     move.l    $8F8(a0),a1
  176.     tst.b    (a1)
  177.     beq.b    L116
  178. L115
  179. ;      GLubyte r = (GLint) (ctx->Color.ClearColor[0] * 255.0F);
  180.     fmove.s    $21C8(a0),fp0
  181.     fmul.s    #$.437F0000,fp0
  182.     fmove.l    fp0,d0
  183.     move.b    d0,d3
  184. ;      GLubyte g = (GLint) (ctx->Color.ClearColor[1] * 255.0F);
  185.     lea    $21C8(a0),a1
  186.     fmove.s    4(a1),fp0
  187.     fmul.s    #$.437F0000,fp0
  188.     fmove.l    fp0,d0
  189.     move.b    d0,d2
  190. ;      GLubyte b = (GLint) (ctx->Color.ClearColor[2] * 255.0F);
  191.     lea    $21C8(a0),a1
  192.     fmove.s    $8(a1),fp0
  193.     fmul.s    #$.437F0000,fp0
  194.     fmove.l    fp0,d0
  195.     move.b    d0,d1
  196. ;      GLubyte a = (GLint) (ctx->Color.ClearColor[3] * 255.0F);
  197.     lea    $21C8(a0),a1
  198.     fmove.s    $C(a1),fp0
  199.     fmul.s    #$.437F0000,fp0
  200.     fmove.l    fp0,d0
  201. ;      (*ctx->Driver.ClearColor)( ctx, r, g, b, a );
  202.     move.b    d0,-(a7)
  203.     move.b    d1,-(a7)
  204.     move.b    d2,-(a7)
  205.     move.b    d3,-(a7)
  206.     move.l    a0,-(a7)
  207.     move.l    $90C(a0),a0
  208.     jsr    (a0)
  209.     add.w    #$C,a7
  210. L116
  211.     fmovem.x (a7)+,fp2/fp3
  212.     movem.l    (a7)+,d2/d3
  213.     rts
  214.  
  215. L87
  216.     dc.b    'glClearColor',0
  217.  
  218.     SECTION "_clear_color_buffer_with_masking:0",CODE
  219.  
  220.  
  221. ;static void clear_color_buffer_with_masking( GLcontext *ctx )
  222. _clear_color_buffer_with_masking
  223. L137    EQU    -$1F70
  224.     link    a5,#L137
  225.     movem.l    d2-d7/a2,-(a7)
  226.     move.l    $8(a5),a2
  227. L117
  228. ;   if (ctx->Scissor.Enabled) 
  229.     move.l    a2,a0
  230.     add.l    #$DE92,a0
  231.     tst.b    (a0)
  232.     beq.b    L119
  233. L118
  234. ;      x = ctx->Buffer->Xmin;
  235.     move.l    $8FC(a2),a0
  236.     move.l    $24(a0),d4
  237. ;      y = ctx->Buffer->Ymin;
  238.     move.l    $8FC(a2),a0
  239.     move.l    $2C(a0),d3
  240. ;      height = ctx->Buffer->Ymax - ctx->Buffer->Ymin + 1;
  241.     move.l    $8FC(a2),a0
  242.     move.l    $30(a0),-$C(a5)
  243.     move.l    $8FC(a2),a0
  244.     move.l    -$C(a5),d0
  245.     sub.l    $2C(a0),d0
  246.     move.l    d0,-$C(a5)
  247.     addq.l    #1,-$C(a5)
  248. ;      width  = ctx->Buffer->Xmax - ctx->Buffer->Xmin + 1;
  249.     move.l    $8FC(a2),a0
  250.     move.l    $28(a0),d2
  251.     move.l    $8FC(a2),a0
  252.     sub.l    $24(a0),d2
  253.     addq.l    #1,d2
  254.     bra.b    L120
  255. L119
  256. ;      x = 0;
  257.     moveq    #0,d4
  258. ;      y = 0;
  259.     moveq    #0,d3
  260. ;      height = ctx->Buffer->Height;
  261.     move.l    $8FC(a2),a0
  262.     move.l    $8(a0),-$C(a5)
  263. ;      width  = ctx->Buffer->Width;
  264.     move.l    $8FC(a2),a0
  265.     move.l    4(a0),d2
  266. L120
  267. ;   if (ctx->Visual->RGBAflag) 
  268.     move.l    $8F8(a2),a0
  269.     tst.b    (a0)
  270.     beq    L130
  271. L121
  272. ;      GLubyte r = (GLint) (ctx->Color.ClearColor[0] * 255.0F);
  273.     fmove.s    $21C8(a2),fp0
  274.     fmul.s    #$.437F0000,fp0
  275.     fmove.l    fp0,d0
  276.     move.b    d0,-$11(a5)
  277. ;      GLubyte g = (GLint) (ctx->Color.ClearColor[1] * 255.0F);
  278.     lea    $21C8(a2),a0
  279.     fmove.s    4(a0),fp0
  280.     fmul.s    #$.437F0000,fp0
  281.     fmove.l    fp0,d0
  282.     move.b    d0,d7
  283. ;      GLubyte b = (GLint) (ctx->Color.ClearColor[2] * 255.0F);
  284.     lea    $21C8(a2),a0
  285.     fmove.s    $8(a0),fp0
  286.     fmul.s    #$.437F0000,fp0
  287.     fmove.l    fp0,d0
  288.     move.b    d0,d6
  289. ;      GLubyte a = (GLint) (ctx->Color.ClearColor[3] * 255.0F);
  290.     lea    $21C8(a2),a0
  291.     fmove.s    $C(a0),fp0
  292.     fmul.s    #$.437F0000,fp0
  293.     fmove.l    fp0,d0
  294.     move.b    d0,d5
  295. ;      for (i=0;
  296.     clr.l    -$18(a5)
  297.     bra    L128
  298. L122
  299. ;         for (j=0;
  300.     moveq    #0,d0
  301.     bra.b    L124
  302. L123
  303. ;            rgba[j][RCOMP] = r;
  304.     lea    -$1918(a5),a0
  305.     move.b    -$11(a5),0(a0,d0.l*4)
  306. ;            rgba[j][GCOMP] = g;
  307.     lea    -$1918(a5),a0
  308.     lea    0(a0,d0.l*4),a0
  309.     move.b    d7,1(a0)
  310. ;            rgba[j][BCOMP] = b;
  311.     lea    -$1918(a5),a0
  312.     lea    0(a0,d0.l*4),a0
  313.     move.b    d6,2(a0)
  314. ;            rgba[j][ACOMP] = a;
  315.     lea    -$1918(a5),a0
  316.     lea    0(a0,d0.l*4),a0
  317.     move.b    d5,3(a0)
  318.     addq.l    #1,d0
  319. L124
  320.     cmp.l    d2,d0
  321.     blt.b    L123
  322. L125
  323. ;         gl_mask_rgba_span( ctx, width, x, y, rgba );
  324.     pea    -$1918(a5)
  325.     move.l    d3,-(a7)
  326.     move.l    d4,-(a7)
  327.     move.l    d2,-(a7)
  328.     move.l    a2,-(a7)
  329.     jsr    _gl_mask_rgba_span
  330.     add.w    #$14,a7
  331. ;         (*ctx->Driver.WriteRGBASpan)( ctx, width, x, y, (C
  332.     clr.l    -(a7)
  333.     pea    -$1918(a5)
  334.     move.l    d3,-(a7)
  335.     move.l    d4,-(a7)
  336.     move.l    d2,-(a7)
  337.     move.l    a2,-(a7)
  338.     move.l    $924(a2),a0
  339.     jsr    (a0)
  340.     add.w    #$18,a7
  341. ;         if (ctx->RasterMask & ALPHABUF_BIT) 
  342.     move.l    a2,a0
  343.     add.l    #$E974,a0
  344.     move.l    (a0),d0
  345.     and.l    #$100,d0
  346.     beq.b    L127
  347. L126
  348. ;            gl_write_alpha_span( ctx, width, x, y, (CONS
  349.     clr.l    -(a7)
  350.     pea    -$1918(a5)
  351.     move.l    d3,-(a7)
  352.     move.l    d4,-(a7)
  353.     move.l    d2,-(a7)
  354.     move.l    a2,-(a7)
  355.     jsr    _gl_write_alpha_span
  356.     add.w    #$18,a7
  357. L127
  358.     addq.l    #1,-$18(a5)
  359.     addq.l    #1,d3
  360. L128
  361.     move.l    -$18(a5),d0
  362.     cmp.l    -$C(a5),d0
  363.     blt    L122
  364. L129
  365.     bra.b    L136
  366. L130
  367. ;      MEMSET( mask, 1, width )
  368.     move.l    d2,-(a7)
  369.     pea    1.w
  370.     pea    -$1F50(a5)
  371.     jsr    _q_memset
  372.     add.w    #$C,a7
  373. ;      for (i=0;
  374.     moveq    #0,d5
  375.     bra.b    L135
  376. L131
  377. ;         for (j=0;
  378.     moveq    #0,d0
  379.     bra.b    L133
  380. L132
  381. ;            indx[j] = ctx->Color.ClearIndex;
  382.     lea    -$1910(a5),a0
  383.     move.l    $21C4(a2),0(a0,d0.l*4)
  384.     addq.l    #1,d0
  385. L133
  386.     cmp.l    d2,d0
  387.     blt.b    L132
  388. L134
  389. ;         gl_mask_index_span( ctx, width, x, y, indx );
  390.     pea    -$1910(a5)
  391.     move.l    d3,-(a7)
  392.     move.l    d4,-(a7)
  393.     move.l    d2,-(a7)
  394.     move.l    a2,-(a7)
  395.     jsr    _gl_mask_index_span
  396.     add.w    #$14,a7
  397. ;         (*ctx->Driver.WriteCI32Span)( ctx, width, x, y, in
  398.     pea    -$1F50(a5)
  399.     pea    -$1910(a5)
  400.     move.l    d3,-(a7)
  401.     move.l    d4,-(a7)
  402.     move.l    d2,-(a7)
  403.     move.l    a2,-(a7)
  404.     move.l    $938(a2),a0
  405.     jsr    (a0)
  406.     add.w    #$18,a7
  407.     addq.l    #1,d5
  408.     addq.l    #1,d3
  409. L135
  410.     cmp.l    -$C(a5),d5
  411.     blt.b    L131
  412. L136
  413.     movem.l    (a7)+,d2-d7/a2
  414.     unlk    a5
  415.     rts
  416.  
  417.     SECTION "_clear_color_buffers:0",CODE
  418.  
  419.  
  420. ;static void clear_color_buffers( GLcontext *ctx )
  421. _clear_color_buffers
  422.     movem.l    d2-d4/a2,-(a7)
  423.     move.l    $14(a7),a2
  424. L138
  425. ;   if (ctx->Color.SWmasking) 
  426.     tst.b    $21E0(a2)
  427.     beq.b    L140
  428. L139
  429. ;      clear_color_buffer_with_masking( ctx );
  430.     move.l    a2,-(a7)
  431.     jsr    _clear_color_buffer_with_masking
  432.     addq.w    #4,a7
  433.     bra    L142
  434. L140
  435. ;      GLint x = ctx->Buffer->Xmin;
  436.     move.l    $8FC(a2),a0
  437.     move.l    $24(a0),d4
  438. ;      GLint y = ctx->Buffer->Ymin;
  439.     move.l    $8FC(a2),a0
  440.     move.l    $2C(a0),d3
  441. ;      GLint height = ctx->Buffer->Ymax - ctx->Buffer->Ymin + 1;
  442.     move.l    $8FC(a2),a0
  443.     move.l    $30(a0),d1
  444.     move.l    $8FC(a2),a0
  445.     sub.l    $2C(a0),d1
  446.     addq.l    #1,d1
  447. ;      GLint width  = ctx->Buffer->Xmax - ctx->Buffer->Xmin + 1;
  448.     move.l    $8FC(a2),a0
  449.     move.l    $28(a0),d0
  450.     move.l    $8FC(a2),a0
  451.     sub.l    $24(a0),d0
  452.     addq.l    #1,d0
  453. ;      (void) (*ctx->Driver.Clear)( ctx, GL_COLOR_BUFFER_BIT,
  454.     move.l    d1,-(a7)
  455.     move.l    d0,-(a7)
  456.     move.l    d3,-(a7)
  457.     move.l    d4,-(a7)
  458.     move.l    a2,a0
  459.     add.l    #$DE92,a0
  460.     tst.b    (a0)
  461.     seq    d0
  462.     and.l    #1,d0
  463.     move.b    d0,-(a7)
  464.     pea    $4000.w
  465.     move.l    a2,-(a7)
  466.     move.l    $910(a2),a0
  467.     jsr    (a0)
  468.     add.w    #$1A,a7
  469. ;      if (ctx->RasterMask & ALPHABUF_BIT) 
  470.     move.l    a2,a0
  471.     add.l    #$E974,a0
  472.     move.l    (a0),d0
  473.     and.l    #$100,d0
  474.     beq.b    L142
  475. L141
  476. ;         gl_clear_alpha_buffers( ctx );
  477.     move.l    a2,-(a7)
  478.     jsr    _gl_clear_alpha_buffers
  479.     addq.w    #4,a7
  480. L142
  481. ;   if (ctx->RasterMask & FRONT_AND_BACK_BIT) 
  482.     move.l    a2,a0
  483.     add.l    #$E974,a0
  484.     move.l    (a0),d0
  485.     and.l    #$400,d0
  486.     beq    L147
  487. L143
  488. ;      (*ctx->Driver.SetBuffer)( ctx, GL_BACK );
  489.     pea    $405.w
  490.     move.l    a2,-(a7)
  491.     move.l    $91C(a2),a0
  492.     jsr    (a0)
  493.     addq.w    #$8,a7
  494. ;      if (ctx->Color.SWmasking) 
  495.     tst.b    $21E0(a2)
  496.     beq.b    L145
  497. L144
  498. ;         clear_color_buffer_with_masking( ctx );
  499.     move.l    a2,-(a7)
  500.     jsr    _clear_color_buffer_with_masking
  501.     addq.w    #4,a7
  502.     bra.b    L146
  503. L145
  504. ;         GLint x = ctx->Buffer->Xmin;
  505.     move.l    $8FC(a2),a0
  506.     move.l    $24(a0),d4
  507. ;         GLint y = ctx->Buffer->Ymin;
  508.     move.l    $8FC(a2),a0
  509.     move.l    $2C(a0),d3
  510. ;         GLint height = ctx->Buffer->Ymax - ctx->Buffer->Ym
  511.     move.l    $8FC(a2),a0
  512.     move.l    $30(a0),d1
  513.     move.l    $8FC(a2),a0
  514.     sub.l    $2C(a0),d1
  515.     addq.l    #1,d1
  516. ;         GLint width  = ctx->Buffer->Xmax - ctx->Buffer->Xm
  517.     move.l    $8FC(a2),a0
  518.     move.l    $28(a0),d0
  519.     move.l    $8FC(a2),a0
  520.     sub.l    $24(a0),d0
  521.     addq.l    #1,d0
  522. ;         (void) (*ctx->Driver.Clear)( ctx, GL_COLOR_BUFFER_
  523.     move.l    d1,-(a7)
  524.     move.l    d0,-(a7)
  525.     move.l    d3,-(a7)
  526.     move.l    d4,-(a7)
  527.     move.l    a2,a0
  528.     add.l    #$DE92,a0
  529.     tst.b    (a0)
  530.     seq    d0
  531.     and.l    #1,d0
  532.     move.b    d0,-(a7)
  533.     pea    $4000.w
  534.     move.l    a2,-(a7)
  535.     move.l    $910(a2),a0
  536.     jsr    (a0)
  537.     add.w    #$1A,a7
  538. L146
  539. ;      (*ctx->Driver.SetBuffer)( ctx, GL_FRONT );
  540.     pea    $404.w
  541.     move.l    a2,-(a7)
  542.     move.l    $91C(a2),a0
  543.     jsr    (a0)
  544.     addq.w    #$8,a7
  545. L147
  546.     movem.l    (a7)+,d2-d4/a2
  547.     rts
  548.  
  549.     SECTION "_gl_Clear:0",CODE
  550.  
  551.  
  552. ;void gl_Clear( GLcontext *ctx, GLbitfield mask )
  553.     XDEF    _gl_Clear
  554. _gl_Clear
  555.     movem.l    d2-d7/a2,-(a7)
  556.     move.l    $24(a7),d5
  557.     move.l    $20(a7),a2
  558. L149
  559. ;   if (INSIDE_BEGIN_END(ctx)) 
  560.     move.l    a2,a0
  561.     add.l    #$E968,a0
  562.     move.l    (a0),d0
  563.     cmp.l    #$1A00,d0
  564.     beq.b    L151
  565. L150
  566. ;      gl_error( ctx, GL_INVALID_OPERATION, "glClear" );
  567.     move.l    #L148,-(a7)
  568.     pea    $502.w
  569.     move.l    a2,-(a7)
  570.     jsr    _gl_error
  571.     add.w    #$C,a7
  572.     movem.l    (a7)+,d2-d7/a2
  573.     rts
  574. L151
  575. ;   if (ctx->RenderMode==GL_RENDER) 
  576.     move.l    a2,a0
  577.     add.l    #$E964,a0
  578.     move.l    (a0),d0
  579.     cmp.l    #$1C00,d0
  580.     bne    L169
  581. L152
  582. ;      if (ctx->NewState) 
  583.     move.l    a2,a0
  584.     add.l    #$E960,a0
  585.     tst.l    (a0)
  586.     beq.b    L154
  587. L153
  588. ;         gl_update_state( ctx );
  589.     move.l    a2,-(a7)
  590.     jsr    _gl_update_state
  591.     addq.w    #4,a7
  592. L154
  593. ;      x = ctx->Buffer->Xmin;
  594.     move.l    $8FC(a2),a0
  595.     move.l    $24(a0),d7
  596. ;      y = ctx->Buffer->Ymin;
  597.     move.l    $8FC(a2),a0
  598.     move.l    $2C(a0),d6
  599. ;      height = ctx->Buffer->Ymax - ctx->Buffer->Ymin + 1;
  600.     move.l    $8FC(a2),a0
  601.     move.l    $30(a0),d4
  602.     move.l    $8FC(a2),a0
  603.     sub.l    $2C(a0),d4
  604.     addq.l    #1,d4
  605. ;      width  = ctx->Buffer->Xmax - ctx->Buffer->Xmin + 1;
  606.     move.l    $8FC(a2),a0
  607.     move.l    $28(a0),d3
  608.     move.l    $8FC(a2),a0
  609.     sub.l    $24(a0),d3
  610.     addq.l    #1,d3
  611. ;      newMask = (*ctx->Driver.Clear)( ctx, mask, !ctx->Scissor
  612.     move.l    d4,-(a7)
  613.     move.l    d3,-(a7)
  614.     move.l    d6,-(a7)
  615.     move.l    d7,-(a7)
  616.     move.l    a2,a0
  617.     add.l    #$DE92,a0
  618.     tst.b    (a0)
  619.     seq    d0
  620.     and.l    #1,d0
  621.     move.b    d0,-(a7)
  622.     move.l    d5,-(a7)
  623.     move.l    a2,-(a7)
  624.     move.l    $910(a2),a0
  625.     jsr    (a0)
  626.     add.w    #$1A,a7
  627.     move.l    d0,d2
  628. ;      if ( (mask & GL_COLOR_BUFFER_BIT) &&
  629.     move.l    d5,d0
  630.     and.l    #$4000,d0
  631.     beq.b    L158
  632. L155
  633.     move.l    d2,d0
  634.     and.l    #$4000,d0
  635.     bne.b    L158
  636. L156
  637.     move.l    a2,a0
  638.     add.l    #$E974,a0
  639.     move.l    (a0),d0
  640.     and.l    #$100,d0
  641.     beq.b    L158
  642. L157
  643. ;         gl_clear_alpha_buffers( ctx );
  644.     move.l    a2,-(a7)
  645.     jsr    _gl_clear_alpha_buffers
  646.     addq.w    #4,a7
  647. L158
  648. ;      if ((mask & GL_COLOR_BUFFER_BIT)
  649.     and.l    #$4000,d5
  650.     beq.b    L161
  651. L159
  652.     move.l    a2,a0
  653.     add.l    #$E974,a0
  654.     move.l    (a0),d0
  655.     and.l    #$400,d0
  656.     beq.b    L161
  657. L160
  658. ;         (*ctx->Driver.SetBuffer)( ctx, GL_BACK );
  659.     pea    $405.w
  660.     move.l    a2,-(a7)
  661.     move.l    $91C(a2),a0
  662.     jsr    (a0)
  663.     addq.w    #$8,a7
  664. ;         (void) (*ctx->Driver.Clear)( ctx, GL_COLOR_BUFFER_
  665.     move.l    d4,-(a7)
  666.     move.l    d3,-(a7)
  667.     move.l    d6,-(a7)
  668.     move.l    d7,-(a7)
  669.     move.l    a2,a0
  670.     add.l    #$DE92,a0
  671.     tst.b    (a0)
  672.     seq    d0
  673.     and.l    #1,d0
  674.     move.b    d0,-(a7)
  675.     pea    $4000.w
  676.     move.l    a2,-(a7)
  677.     move.l    $910(a2),a0
  678.     jsr    (a0)
  679.     add.w    #$1A,a7
  680. ;         (*ctx->Driver.SetBuffer)( ctx, GL_FRONT );
  681.     pea    $404.w
  682.     move.l    a2,-(a7)
  683.     move.l    $91C(a2),a0
  684.     jsr    (a0)
  685.     addq.w    #$8,a7
  686. L161
  687. ;      if (newMask & GL_COLOR_BUFFER_BIT)    
  688.     move.l    d2,d0
  689.     and.l    #$4000,d0
  690.     beq.b    L163
  691. L162
  692. ;      if (newMask & GL_C
  693.     move.l    a2,-(a7)
  694.     jsr    _clear_color_buffers
  695.     addq.w    #4,a7
  696. L163
  697. ;      if (newMask & GL_DEPTH_BUFFER_BIT)    
  698.     move.l    d2,d0
  699.     and.l    #$100,d0
  700.     beq.b    L165
  701. L164
  702. ;      if (newMask & GL_D
  703.     move.l    a2,-(a7)
  704.     jsr    _gl_clear_depth_buffer
  705.     addq.w    #4,a7
  706. L165
  707. ;      if (newMask & GL_ACCUM_BUFFER_BIT)    
  708.     move.l    d2,d0
  709.     and.l    #$200,d0
  710.     beq.b    L167
  711. L166
  712. ;      if (newMask & GL_A
  713.     move.l    a2,-(a7)
  714.     jsr    _gl_clear_accum_buffer
  715.     addq.w    #4,a7
  716. L167
  717. ;      if (newMask & GL_STENCIL_BUFFER_BIT)  
  718.     and.l    #$400,d2
  719.     beq.b    L169
  720. L168
  721. ;      if (newMask & GL_S
  722.     move.l    a2,-(a7)
  723.     jsr    _gl_clear_stencil_buffer
  724.     addq.w    #4,a7
  725. L169
  726.     movem.l    (a7)+,d2-d7/a2
  727.     rts
  728.  
  729. L148
  730.     dc.b    'glClear',0
  731.  
  732.     SECTION "_gl_GetString:0",CODE
  733.  
  734.  
  735. ;const GLubyte *gl_GetString( GLcontext *ctx, GLenum name )
  736.     XDEF    _gl_GetString
  737. _gl_GetString
  738.     move.l    a2,-(a7)
  739.     move.l    $C(a7),d1
  740.     move.l    $8(a7),a2
  741. L173
  742. ;   if (INSIDE_BEGIN_END(ctx)) 
  743.     move.l    a2,a0
  744.     add.l    #$E968,a0
  745.     move.l    (a0),d0
  746.     cmp.l    #$1A00,d0
  747.     beq.b    L175
  748. L174
  749. ;      gl_error( ctx, GL_INVALID_OPERATION, "glGetString" );
  750.     move.l    #L170,-(a7)
  751.     pea    $502.w
  752.     move.l    a2,-(a7)
  753.     jsr    _gl_error
  754.     add.w    #$C,a7
  755.     moveq    #0,d0
  756.     move.l    (a7)+,a2
  757.     rts
  758. L175
  759. ;   switch (name)
  760.     cmp.l    #$1F02,d1
  761.     beq.b    L180
  762.     bgt.b    L185
  763.     cmp.l    #$1F00,d1
  764.     beq.b    L176
  765.     cmp.l    #$1F01,d1
  766.     beq.b    L177
  767.     bra    L184
  768. L185
  769.     cmp.l    #$1F03,d1
  770.     beq.b    L181
  771.     bra.b    L184
  772. ;      
  773. L176
  774.     move.l    _vendor___gl_GetString(a6),d0
  775.     move.l    (a7)+,a2
  776.     rts
  777. L177
  778. ;         strcpy(result, "Mesa");
  779.     move.l    #L171,-(a7)
  780.     pea    _result___gl_GetString(a6)
  781.     jsr    _strcpy
  782.     addq.w    #$8,a7
  783. ;         if (ctx->Driver.RendererString) 
  784.     tst.l    $900(a2)
  785.     beq.b    L179
  786. L178
  787. ;            strcat(result, " ");
  788.     move.l    #L172,-(a7)
  789.     pea    _result___gl_GetString(a6)
  790.     jsr    _strcat
  791.     addq.w    #$8,a7
  792. ;            strcat(result, (*ctx->Driver.RendererString)
  793.     move.l    $900(a2),a0
  794.     jsr    (a0)
  795.     move.l    d0,-(a7)
  796.     pea    _result___gl_GetString(a6)
  797.     jsr    _strcat
  798.     addq.w    #$8,a7
  799. L179
  800.     lea    _result___gl_GetString(a6),a0
  801.     move.l    a0,d0
  802.     move.l    (a7)+,a2
  803.     rts
  804. L180
  805.     move.l    _version___gl_GetString(a6),d0
  806.     move.l    (a7)+,a2
  807.     rts
  808. L181
  809. ;         if (ctx->Driver.ExtensionString) 
  810.     tst.l    $95C(a2)
  811.     beq.b    L183
  812. L182
  813.     move.l    a2,-(a7)
  814.     move.l    $95C(a2),a0
  815.     jsr    (a0)
  816.     addq.w    #4,a7
  817.     move.l    (a7)+,a2
  818.     rts
  819. L183
  820.     move.l    _extensions___gl_GetString(a6),d0
  821.     move.l    (a7)+,a2
  822.     rts
  823. L184
  824. ;         gl_error( ctx, GL_INVALID_ENUM, "glGetString" );
  825.     move.l    #L170,-(a7)
  826.     pea    $500.w
  827.     move.l    a2,-(a7)
  828.     jsr    _gl_error
  829.     add.w    #$C,a7
  830.     moveq    #0,d0
  831.     move.l    (a7)+,a2
  832.     rts
  833.  
  834. L172
  835.     dc.b    ' ',0
  836. L171
  837.     dc.b    'Mesa',0
  838. L170
  839.     dc.b    'glGetString',0
  840.  
  841.     SECTION "_gl_GetString:1",DATA
  842.  
  843. _vendor___gl_GetString
  844.     dc.l    L77
  845. _version___gl_GetString
  846.     dc.l    L78
  847. _extensions___gl_GetString
  848.     dc.l    L79
  849.  
  850.     SECTION "_gl_GetString:2",BSS
  851.  
  852. _result___gl_GetString
  853.     ds.b    1000
  854.  
  855.     SECTION "_gl_Finish:0",CODE
  856.  
  857.  
  858. ;void gl_Finish( GLcontext *ctx )
  859.     XDEF    _gl_Finish
  860. _gl_Finish
  861.     move.l    4(a7),a0
  862. L187
  863. ;   if (INSIDE_BEGIN_END(ctx)) 
  864.     move.l    a0,a1
  865.     add.l    #$E968,a1
  866.     move.l    (a1),d0
  867.     cmp.l    #$1A00,d0
  868.     beq.b    L189
  869. L188
  870. ;      gl_error( ctx, GL_INVALID_OPERATION, "glFinish" );
  871.     move.l    #L186,-(a7)
  872.     pea    $502.w
  873.     move.l    a0,-(a7)
  874.     jsr    _gl_error
  875.     add.w    #$C,a7
  876.     rts
  877. L189
  878. ;   if (ctx->Driver.Finish) 
  879.     tst.l    $960(a0)
  880.     beq.b    L191
  881. L190
  882. ;      (*ctx->Driver.Finish)( ctx );
  883.     move.l    a0,-(a7)
  884.     move.l    $960(a0),a0
  885.     jsr    (a0)
  886.     addq.w    #4,a7
  887. L191
  888.     rts
  889.  
  890. L186
  891.     dc.b    'glFinish',0
  892.  
  893.     SECTION "_gl_Flush:0",CODE
  894.  
  895.  
  896. ;void gl_Flush( GLcontext *ctx )
  897.     XDEF    _gl_Flush
  898. _gl_Flush
  899.     move.l    4(a7),a0
  900. L193
  901. ;   if (INSIDE_BEGIN_END(ctx)) 
  902.     move.l    a0,a1
  903.     add.l    #$E968,a1
  904.     move.l    (a1),d0
  905.     cmp.l    #$1A00,d0
  906.     beq.b    L195
  907. L194
  908. ;      gl_error( ctx, GL_INVALID_OPERATION, "glFlush" );
  909.     move.l    #L192,-(a7)
  910.     pea    $502.w
  911.     move.l    a0,-(a7)
  912.     jsr    _gl_error
  913.     add.w    #$C,a7
  914.     rts
  915. L195
  916. ;   if (ctx->Driver.Flush) 
  917.     tst.l    $964(a0)
  918.     beq.b    L197
  919. L196
  920. ;      (*ctx->Driver.Flush)( ctx );
  921.     move.l    a0,-(a7)
  922.     move.l    $964(a0),a0
  923.     jsr    (a0)
  924.     addq.w    #4,a7
  925. L197
  926.     rts
  927.  
  928. L192
  929.     dc.b    'glFlush',0
  930.  
  931.     SECTION "_gl_Hint:0",CODE
  932.  
  933.  
  934. ;void gl_Hint( GLcontext *ctx, GLenum target, GLenum mode )
  935.     XDEF    _gl_Hint
  936. _gl_Hint
  937.     movem.l    d2/a2,-(a7)
  938.     move.l    $14(a7),d0
  939.     move.l    $10(a7),d2
  940.     move.l    $C(a7),a2
  941. L201
  942. ;   if (INSIDE_BEGIN_END(ctx)) 
  943.     move.l    a2,a0
  944.     add.l    #$E968,a0
  945.     move.l    (a0),d1
  946.     cmp.l    #$1A00,d1
  947.     beq.b    L203
  948. L202
  949. ;      gl_error( ctx, GL_INVALID_OPERATION, "glHint" );
  950.     move.l    #L198,-(a7)
  951.     pea    $502.w
  952.     move.l    a2,-(a7)
  953.     jsr    _gl_error
  954.     add.w    #$C,a7
  955.     movem.l    (a7)+,d2/a2
  956.     rts
  957. L203
  958. ;   if (mode!=GL_DONT_CARE && mode!=GL_FASTEST && mode!=GL_NICEST)
  959.     cmp.l    #$1100,d0
  960.     beq.b    L207
  961. L204
  962.     cmp.l    #$1101,d0
  963.     beq.b    L207
  964. L205
  965.     cmp.l    #$1102,d0
  966.     beq.b    L207
  967. L206
  968. ;      gl_error( ctx, GL_INVALID_ENUM, "glHint(mode)" );
  969.     move.l    #L199,-(a7)
  970.     pea    $500.w
  971.     move.l    a2,-(a7)
  972.     jsr    _gl_error
  973.     add.w    #$C,a7
  974.     movem.l    (a7)+,d2/a2
  975.     rts
  976. L207
  977. ;   switch (target)
  978.     cmp.l    #$C52,d2
  979.     beq.b    L209
  980.     bgt.b    L215
  981.     cmp.l    #$C50,d2
  982.     beq.b    L210
  983.     cmp.l    #$C51,d2
  984.     beq.b    L211
  985.     bra.b    L213
  986. L215
  987.     cmp.l    #$C53,d2
  988.     beq.b    L212
  989.     cmp.l    #$C54,d2
  990.     beq.b    L208
  991.     bra.b    L213
  992. ;      
  993. L208
  994. ;         ctx->Hint.Fog = mode;
  995.     move.l    d0,$2314(a2)
  996. ;         
  997.     bra.b    L214
  998. L209
  999. ;         ctx->Hint.LineSmooth = mode;
  1000.     move.l    d0,$230C(a2)
  1001. ;         
  1002.     bra.b    L214
  1003. L210
  1004. ;         ctx->Hint.PerspectiveCorrection = mode;
  1005.     move.l    d0,$2304(a2)
  1006. ;         
  1007.     bra.b    L214
  1008. L211
  1009. ;         ctx->Hint.PointSmooth = mode;
  1010.     move.l    d0,$2308(a2)
  1011. ;         
  1012.     bra.b    L214
  1013. L212
  1014. ;         ctx->Hint.PolygonSmooth = mode;
  1015.     move.l    d0,$2310(a2)
  1016. ;         
  1017.     bra.b    L214
  1018. L213
  1019. ;         gl_error( ctx, GL_INVALID_ENUM, "glHint(target)" );
  1020.     move.l    #L200,-(a7)
  1021.     pea    $500.w
  1022.     move.l    a2,-(a7)
  1023.     jsr    _gl_error
  1024.     add.w    #$C,a7
  1025. L214
  1026. ;   ctx->NewState |= NEW_ALL;
  1027.     move.l    a2,a0
  1028.     add.l    #$E960,a0
  1029.     move.l    (a0),d0
  1030.     or.l    #$FF,d0
  1031.     move.l    a2,a0
  1032.     add.l    #$E960,a0
  1033.     move.l    d0,(a0)
  1034.     movem.l    (a7)+,d2/a2
  1035.     rts
  1036.  
  1037. L198
  1038.     dc.b    'glHint',0
  1039. L199
  1040.     dc.b    'glHint(mode)',0
  1041. L200
  1042.     dc.b    'glHint(target)',0
  1043.  
  1044.     SECTION "_gl_DrawBuffer:0",CODE
  1045.  
  1046.  
  1047. ;void gl_DrawBuffer( GLcontext *ctx, GLenum mode )
  1048.     XDEF    _gl_DrawBuffer
  1049. _gl_DrawBuffer
  1050.     movem.l    d2/a2,-(a7)
  1051.     move.l    $10(a7),d2
  1052.     move.l    $C(a7),a2
  1053. L217
  1054. ;   if (INSIDE_BEGIN_END(ctx)) 
  1055.     move.l    a2,a0
  1056.     add.l    #$E968,a0
  1057.     move.l    (a0),d0
  1058.     cmp.l    #$1A00,d0
  1059.     beq.b    L219
  1060. L218
  1061. ;      gl_error( ctx, GL_INVALID_OPERATION, "glDrawBuffer" );
  1062.     move.l    #L216,-(a7)
  1063.     pea    $502.w
  1064.     move.l    a2,-(a7)
  1065.     jsr    _gl_error
  1066.     add.w    #$C,a7
  1067.     movem.l    (a7)+,d2/a2
  1068.     rts
  1069. L219
  1070. ;   switch (mode)
  1071.     move.l    d2,d0
  1072.     cmp.l    #$406,d0
  1073.     beq    L227
  1074.     bgt.b    L230
  1075.     cmp.l    #$402,d0
  1076.     beq    L223
  1077.     bgt.b    L231
  1078.     cmp.l    #$400,d0
  1079.     beq.b    L220
  1080.     bgt.b    L232
  1081.     cmp.l    #0,d0
  1082.     beq    L226
  1083.     bra    L228
  1084. L232
  1085.     bgt    L227
  1086. L231
  1087.     cmp.l    #$404,d0
  1088.     beq.b    L220
  1089.     bgt.b    L233
  1090.     blt    L227
  1091. L233
  1092.     bgt    L223
  1093. L230
  1094.     sub.l    #$407,d0
  1095.     cmp.l    #5,d0
  1096.     bhi    L228
  1097.     move.l    L234(pc,d0.l*4),a0
  1098.     jmp    (a0)
  1099. L234
  1100.     dc.l    L227
  1101.     dc.l    L220
  1102.     dc.l    L227
  1103.     dc.l    L227
  1104.     dc.l    L227
  1105.     dc.l    L227
  1106. ;      
  1107. L220
  1108. ;         if ( (*ctx->Driver.SetBuffer)( ctx, GL_FRONT ) == 
  1109.     pea    $404.w
  1110.     move.l    a2,-(a7)
  1111.     move.l    $91C(a2),a0
  1112.     jsr    (a0)
  1113.     addq.w    #$8,a7
  1114.     tst.b    d0
  1115.     bne.b    L222
  1116. L221
  1117. ;            gl_error( ctx, GL_INVALID_OPERATION, "glDraw
  1118.     move.l    #L216,-(a7)
  1119.     pea    $502.w
  1120.     move.l    a2,-(a7)
  1121.     jsr    _gl_error
  1122.     add.w    #$C,a7
  1123.     movem.l    (a7)+,d2/a2
  1124.     rts
  1125. L222
  1126. ;         ctx->Color.DrawBuffer = mode;
  1127.     move.l    d2,$21E2(a2)
  1128. ;         ctx->Buffer->Alpha = ctx->Buffer->FrontAlpha;
  1129.     move.l    $8FC(a2),a0
  1130.     move.l    $18(a0),a1
  1131.     move.l    $8FC(a2),a0
  1132.     move.l    a1,$20(a0)
  1133. ;         ctx->NewState |= NEW_RASTER_OPS;
  1134.     move.l    a2,a0
  1135.     add.l    #$E960,a0
  1136.     move.l    (a0),d0
  1137.     or.l    #2,d0
  1138.     move.l    a2,a0
  1139.     add.l    #$E960,a0
  1140.     move.l    d0,(a0)
  1141. ;         
  1142.     bra    L229
  1143. L223
  1144. ;         if ( (*ctx->Driver.SetBuffer)( ctx, GL_BACK ) == G
  1145.     pea    $405.w
  1146.     move.l    a2,-(a7)
  1147.     move.l    $91C(a2),a0
  1148.     jsr    (a0)
  1149.     addq.w    #$8,a7
  1150.     tst.b    d0
  1151.     bne.b    L225
  1152. L224
  1153. ;            gl_error( ctx, GL_INVALID_OPERATION, "glDraw
  1154.     move.l    #L216,-(a7)
  1155.     pea    $502.w
  1156.     move.l    a2,-(a7)
  1157.     jsr    _gl_error
  1158.     add.w    #$C,a7
  1159.     movem.l    (a7)+,d2/a2
  1160.     rts
  1161. L225
  1162. ;         ctx->Color.DrawBuffer = mode;
  1163.     move.l    d2,$21E2(a2)
  1164. ;         ctx->Buffer->Alpha = ctx->Buffer->BackAlpha;
  1165.     move.l    $8FC(a2),a0
  1166.     move.l    $1C(a0),a1
  1167.     move.l    $8FC(a2),a0
  1168.     move.l    a1,$20(a0)
  1169. ;         ctx->NewState |= NEW_RASTER_OPS;
  1170.     move.l    a2,a0
  1171.     add.l    #$E960,a0
  1172.     move.l    (a0),d0
  1173.     or.l    #2,d0
  1174.     move.l    a2,a0
  1175.     add.l    #$E960,a0
  1176.     move.l    d0,(a0)
  1177. ;         
  1178.     bra.b    L229
  1179. L226
  1180. ;         ctx->Color.DrawBuffer = mode;
  1181.     move.l    d2,$21E2(a2)
  1182. ;         ctx->Buffer->Alpha = NULL;
  1183.     move.l    $8FC(a2),a0
  1184.     clr.l    $20(a0)
  1185. ;         ctx->NewState |= NEW_RASTER_OPS;
  1186.     move.l    a2,a0
  1187.     add.l    #$E960,a0
  1188.     move.l    (a0),d0
  1189.     or.l    #2,d0
  1190.     move.l    a2,a0
  1191.     add.l    #$E960,a0
  1192.     move.l    d0,(a0)
  1193. ;         
  1194.     bra.b    L229
  1195. L227
  1196. ;         gl_error( ctx, GL_INVALID_OPERATION, "glDrawBuffer
  1197.     move.l    #L216,-(a7)
  1198.     pea    $502.w
  1199.     move.l    a2,-(a7)
  1200.     jsr    _gl_error
  1201.     add.w    #$C,a7
  1202. ;         
  1203.     bra.b    L229
  1204. L228
  1205. ;         gl_error( ctx, GL_INVALID_ENUM, "glDrawBuffer" );
  1206.     move.l    #L216,-(a7)
  1207.     pea    $500.w
  1208.     move.l    a2,-(a7)
  1209.     jsr    _gl_error
  1210.     add.w    #$C,a7
  1211. L229
  1212.     movem.l    (a7)+,d2/a2
  1213.     rts
  1214.  
  1215. L216
  1216.     dc.b    'glDrawBuffer',0
  1217.  
  1218.     SECTION "_gl_ReadBuffer:0",CODE
  1219.  
  1220.  
  1221. ;void gl_ReadBuffer( GLcontext *ctx, GLenum mode )
  1222.     XDEF    _gl_ReadBuffer
  1223. _gl_ReadBuffer
  1224.     movem.l    d2/a2,-(a7)
  1225.     move.l    $10(a7),d2
  1226.     move.l    $C(a7),a2
  1227. L236
  1228. ;   if (INSIDE_BEGIN_END(ctx)) 
  1229.     move.l    a2,a0
  1230.     add.l    #$E968,a0
  1231.     move.l    (a0),d0
  1232.     cmp.l    #$1A00,d0
  1233.     beq.b    L238
  1234. L237
  1235. ;      gl_error( ctx, GL_INVALID_OPERATION, "glReadBuffer" );
  1236.     move.l    #L235,-(a7)
  1237.     pea    $502.w
  1238.     move.l    a2,-(a7)
  1239.     jsr    _gl_error
  1240.     add.w    #$C,a7
  1241.     movem.l    (a7)+,d2/a2
  1242.     rts
  1243. L238
  1244. ;   switch (mode)
  1245.     move.l    d2,d0
  1246.     sub.l    #$400,d0
  1247.     cmp.l    #$C,d0
  1248.     bhi    L246
  1249.     move.l    L248(pc,d0.l*4),a0
  1250.     jmp    (a0)
  1251. L248
  1252.     dc.l    L239
  1253.     dc.l    L245
  1254.     dc.l    L242
  1255.     dc.l    L245
  1256.     dc.l    L239
  1257.     dc.l    L242
  1258.     dc.l    L245
  1259.     dc.l    L245
  1260.     dc.l    L246
  1261.     dc.l    L245
  1262.     dc.l    L245
  1263.     dc.l    L245
  1264.     dc.l    L245
  1265. ;      
  1266. L239
  1267. ;         if ( (*ctx->Driver.SetBuffer)( ctx, GL_FRONT ) == 
  1268.     pea    $404.w
  1269.     move.l    a2,-(a7)
  1270.     move.l    $91C(a2),a0
  1271.     jsr    (a0)
  1272.     addq.w    #$8,a7
  1273.     tst.b    d0
  1274.     bne.b    L241
  1275. L240
  1276. ;            gl_error( ctx, GL_INVALID_OPERATION, "glRead
  1277.     move.l    #L235,-(a7)
  1278.     pea    $502.w
  1279.     move.l    a2,-(a7)
  1280.     jsr    _gl_error
  1281.     add.w    #$C,a7
  1282.     movem.l    (a7)+,d2/a2
  1283.     rts
  1284. L241
  1285. ;         ctx->Pixel.ReadBuffer = mode;
  1286.     move.l    a2,a0
  1287.     add.l    #$B168,a0
  1288.     move.l    d2,(a0)
  1289. ;         ctx->Buffer->Alpha = ctx->Buffer->FrontAlpha;
  1290.     move.l    $8FC(a2),a0
  1291.     move.l    $18(a0),a1
  1292.     move.l    $8FC(a2),a0
  1293.     move.l    a1,$20(a0)
  1294. ;         ctx->NewState |= NEW_RASTER_OPS;
  1295.     move.l    a2,a0
  1296.     add.l    #$E960,a0
  1297.     move.l    (a0),d0
  1298.     or.l    #2,d0
  1299.     move.l    a2,a0
  1300.     add.l    #$E960,a0
  1301.     move.l    d0,(a0)
  1302. ;         
  1303.     bra    L247
  1304. L242
  1305. ;         if ( (*ctx->Driver.SetBuffer)( ctx, GL_BACK ) == G
  1306.     pea    $405.w
  1307.     move.l    a2,-(a7)
  1308.     move.l    $91C(a2),a0
  1309.     jsr    (a0)
  1310.     addq.w    #$8,a7
  1311.     tst.b    d0
  1312.     bne.b    L244
  1313. L243
  1314. ;            gl_error( ctx, GL_INVALID_OPERATION, "glRead
  1315.     move.l    #L235,-(a7)
  1316.     pea    $502.w
  1317.     move.l    a2,-(a7)
  1318.     jsr    _gl_error
  1319.     add.w    #$C,a7
  1320.     movem.l    (a7)+,d2/a2
  1321.     rts
  1322. L244
  1323. ;         ctx->Pixel.ReadBuffer = mode;
  1324.     move.l    a2,a0
  1325.     add.l    #$B168,a0
  1326.     move.l    d2,(a0)
  1327. ;         ctx->Buffer->Alpha = ctx->Buffer->BackAlpha;
  1328.     move.l    $8FC(a2),a0
  1329.     move.l    $1C(a0),a1
  1330.     move.l    $8FC(a2),a0
  1331.     move.l    a1,$20(a0)
  1332. ;         ctx->NewState |= NEW_RASTER_OPS;
  1333.     move.l    a2,a0
  1334.     add.l    #$E960,a0
  1335.     move.l    (a0),d0
  1336.     or.l    #2,d0
  1337.     move.l    a2,a0
  1338.     add.l    #$E960,a0
  1339.     move.l    d0,(a0)
  1340. ;         
  1341.     bra.b    L247
  1342. L245
  1343. ;         gl_error( ctx, GL_INVALID_OPERATION, "glReadBuffer
  1344.     move.l    #L235,-(a7)
  1345.     pea    $502.w
  1346.     move.l    a2,-(a7)
  1347.     jsr    _gl_error
  1348.     add.w    #$C,a7
  1349. ;         
  1350.     bra.b    L247
  1351. L246
  1352. ;         gl_error( ctx, GL_INVALID_ENUM, "glReadBuffer" );
  1353.     move.l    #L235,-(a7)
  1354.     pea    $500.w
  1355.     move.l    a2,-(a7)
  1356.     jsr    _gl_error
  1357.     add.w    #$C,a7
  1358. L247
  1359. ;   (void) (*ctx->Driver.SetBuffer)( ctx, ctx->Color.DrawBuffer );
  1360.     move.l    $21E2(a2),-(a7)
  1361.     move.l    a2,-(a7)
  1362.     move.l    $91C(a2),a0
  1363.     jsr    (a0)
  1364.     addq.w    #$8,a7
  1365.     movem.l    (a7)+,d2/a2
  1366.     rts
  1367.  
  1368. L235
  1369.     dc.b    'glReadBuffer',0
  1370.  
  1371.     END
  1372.